package com.learn.finished;

/**
 * 给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 * <p>
 * 说明：你不能倾斜容器。
 */

public class num_11 {
    public static void main(String[] args) {
        int[] arr = {1, 8, 6, 2, 5, 4, 8, 3, 7};//len=9
        int[] arr1 = {1, 1};
        int[] arr2 = {4, 3, 2, 1, 4};
        int[] arr3 = {1, 2, 1};
        System.out.println(maxArea(arr));
        System.out.println(maxArea(arr1));
        System.out.println(maxArea(arr2));
        System.out.println(maxArea(arr3));


    }

    public static int maxArea(int[] height) {
        //x轴共同组成，即存在一个长度，求纵轴最长的同时也求横轴最长
        //两个数值以及其距离，最低的数值*距离，即为面积
        /*双指针！！！！*/
        int area = 0;
        int left = 0;
        int right = height.length - 1;
        int width=right-left;
        int maxArea=0;
        while (left < right) {
            width=right-left;

//            area=width*height(lowest)
            area=Math.min(height[left],height[right])*width;
            maxArea=Math.max(area,maxArea);
            if (height[left]<=height[right]){
                left++;
            }else {
                right--;
            }
        }


        return maxArea;
    }
    public static int maxArea1(int[] height) {
        int left = 0;
        int right = height.length - 1;
        int maxArea = (right - left) * Math.min(height[left],height[right]);
        while (left < right){
            if (height[left] < height[right]){
                left++;
            }else {
                right--;
            }
            maxArea = Math.max(maxArea,(right - left) * Math.min(height[left],height[right]));
        }
        return maxArea;
    }

}
